﻿''============================================================================
''OMANE - Import de la table d'encours pour le calcul du taux garanti
''Copyright © 2010 PIERRE TISSOT CONSEIL / NATIXIS ASSURANCES
''=============================================================================
Imports PTIC_Util
Imports PTIC_GestionBDD
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.Globalization
Imports System.IO

Public Class frmDonneesEncours
    Implements IObserver

#Region "Déclaration des variables de classe"

#Region "Les variables métier"

    'Univers de travail, récupéré depuis la fenêtre d'ossature de l'application et dont
    'le traitement de récupération de la table d'encours est destiné à être paramétré
    Protected _universBDD As UniversOMANE
    Protected dtble_trAge As DataTable
    Protected dtble_trCapi As DataTable

#End Region

#Region "Gestion de l'affichage et de sa mise à jour"
    Protected dv_vueTrCapi As DataView
    Protected dv_vueTrAge As DataView
    Protected bindingSource_TrAge As BindingSource
    Protected bindingSource_TrCapi As BindingSource
    Protected bool_statsCalculees As Boolean
    Protected _bloqueMAJModeleDepuisIHM As Boolean = False
    Dim ldescChSortie() As String = New String() _
            {"Identifiant Réseau", "Identifiant Partenaire", "Identifiant Prêt", "Identifiant Assuré", _
             "Capital Initial", "Date de naissance Assuré", "Date fin prêt", _
             "Identifiant type de prêt", "Date de déblocage des fonds", "Taux de surprime", "Durée en mois", _
             "Capital assuré", "Quotité assurée", "Taux de cotisation", "Taux nominal du prêt", _
             "Catégorie de prêt", "Identifiant option", "Sexe de l'assuré"}

#End Region

#End Region

#Region "Création d'une instance"

    Public Sub New(ByVal universBDD As UniversOMANE)

        ' Cet appel est requis par le Concepteur Windows Form.
        InitializeComponent()

        'Référence vers l'univers de travail OMANE
        Me._universBDD = universBDD
        'Les stats ne sont pas encore calculées (la fenêtre est créée au lancement de l'outil taux garanti)
        bool_statsCalculees = False

        comboBoxTrCapi_InitBinding()
        comboBoxTrAge_InitBinding()
        comboBoxAgeMinMaxSous_Init()

    End Sub
    Private Sub DonneesEncours_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Au chargement, on réajuste la taille du tableLayoutPanel présentant les correspondances de la table d'encours
        TableLayoutPanel1.Width = PTIC_SplitContainerCorresp2.Panel2.Width - 2
    End Sub
    Private Sub comboBoxTrAge_InitBinding()
        'DataBinding pour la comboBox de choix d'un modèle de tranche de capitaux
        dv_vueTrAge = New DataView()
        dv_vueTrAge.Table = _universBDD.refListeTablesReferentiel
        dv_vueTrAge.RowFilter = "strTypeTable='TRANCHE_AGE'"
        cbx_modeleTrAges.DisplayMember = "strNomTable"
        cbx_modeleTrAges.ValueMember = "strNomFichier"
        cbx_modeleTrAges.DataSource = dv_vueTrAge
    End Sub
    Private Sub comboBoxTrCapi_InitBinding()
        'DataBinding pour la comboBox de choix d'un modèle de tranche de capitaux
        dv_vueTrCapi = New DataView()
        dv_vueTrCapi.Table = _universBDD.refListeTablesReferentiel
        dv_vueTrCapi.RowFilter = "strTypeTable='TRANCHE_CAPINI'"
        cbx_ModeleTrCapi.DisplayMember = "strNomTable"
        cbx_ModeleTrCapi.ValueMember = "strNomFichier"
        cbx_ModeleTrCapi.DataSource = dv_vueTrCapi
    End Sub
    Private Sub comboBoxAgeMinMaxSous_Init()
        For i As Integer = 0 To 200
            cbxAgeMinSous.Items.Add(i)
            cbxAgeMaxSous.Items.Add(i)
        Next
        'Définir un dataBinding pour faciliter les interactions.
        cbxAgeMaxSous.SelectedItem = CInt(_universBDD.listeTraitements.getTraitTbleEncoursPrep1.getWHERE("testAgeMax").valeur)
        cbxAgeMinSous.SelectedItem = CInt(_universBDD.listeTraitements.getTraitTbleEncoursPrep1.getWHERE("testAgeMin").valeur)
    End Sub

#End Region

#Region "Onglet Paramétrage général de la base d'encours"

    'Paramétrage de la base de données contenant la table d'encours
    Private Sub btn_parcourir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_parcourir.Click

        Dim openFileDialog1 As New OpenFileDialog
        openFileDialog1.Filter = "Table SAS (*.sas7bdat)|*.sas7bdat|Fichiers access (*.mdb)|*.mdb"
        openFileDialog1.InitialDirectory = csteEmplacementDefautTbleEncours

        If openFileDialog1.ShowDialog() = DialogResult.OK Then
            'Initilisation du traitement de la table d'encours et de la librairie d'encours SAS
            Dim nomBDDEncours As New Cla_NomFichier(openFileDialog1.FileName)
            _universBDD.initLibrairieEncours(nomBDDEncours)
            _universBDD.listeTraitements.getTraitTbleEncours.nomCompletFichier = nomBDDEncours

        End If

    End Sub

    'Choix de la table d'encours à l'intérieur de la base de données précédemment retenue
    Private Sub cbx_NomTableEncours_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbx_NomTableEncours.TextChanged
        If Not _bloqueMAJModeleDepuisIHM Then
            _universBDD.listeTraitements.getTraitTbleEncours.nomTableDansBDD = cbx_NomTableEncours.Text
        End If
    End Sub

    'Visualiser la table d'encours retenue
    Private Sub btn_visualiser_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_visualiser.Click
        Dim visuTable As frmVisuTable
        visuTable = New frmVisuTable(_universBDD.listeTraitements.getTraitTbleEncours)
        visuTable.ShowDialog()
    End Sub

#End Region

#Region "Onglet paramétrage des correspondances de la base d'encours"

#Region "Evènements de l'onglet"
    Private Sub tbp_Correspondances_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbp_Correspondances.Enter
        MAJ_positions_dimensions_controles_ListView(ltv_varFichierSce)
    End Sub
#End Region

#Region "Alimentation et gestion de la listView des variables de la base"

    ''' <summary>
    ''' Alimentation de la listView présentant tous les champs présents dans la base
    ''' d'encours retenue. Des boutons permettant de visualiser les valeurs de chaque champs sont ajoutés.
    ''' La fonction renvoie le nombre de colonnes présentes.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function alim_ltv_varFichierSce() As Integer

        ltv_varFichierSce.BeginUpdate()

        'Ajout des groupes s'ils ne sont pas présents dans la listView
        If ltv_varFichierSce.Groups().Count = 0 Then
            ltv_varFichierSce.Clear()
            ltv_varFichierSce.Columns.Add("Nom variable", 200)
            ltv_varFichierSce.Columns.Add("Détail", 50)

            Dim groupVarChar As New ListViewGroup("gpeVarChar", "Variables chaîne de caractère")
            groupVarChar.HeaderAlignment = HorizontalAlignment.Left
            ltv_varFichierSce.Groups.Add(groupVarChar)
            Dim groupVarNum As New ListViewGroup("gpeVarNum", "Variables numériques")
            groupVarNum.HeaderAlignment = HorizontalAlignment.Left
            ltv_varFichierSce.Groups.Add(groupVarNum)
            Dim groupVarDate As New ListViewGroup("gpeVarDate", "Variables date")
            groupVarDate.HeaderAlignment = HorizontalAlignment.Left
            ltv_varFichierSce.Groups.Add(groupVarDate)
        End If



        Dim it As ListViewItem
        Dim nbItems As Integer = 0
        For Each correspEntree As Correspondance In _universBDD.listeTraitements.getTraitTbleEncours.mapEntree.Values
            it = New ListViewItem()
            it.Font = New Font("Tahoma", 9, FontStyle.Regular)
            it.SubItems(0).Text = correspEntree.chOutil.Nom
            it.SubItems.Add("")
            Select Case correspEntree.chOutil.getFormat.typeStock.Name
                Case "Double"
                    it.ImageKey = "varNum16"
                    ltv_varFichierSce.Groups("gpeVarNum").Items.Add(it)
                Case "String"
                    it.ImageKey = "varCar16"
                    ltv_varFichierSce.Groups("gpeVarChar").Items.Add(it)
                Case "DateTime"
                    it.ImageKey = "varDate16"
                    ltv_varFichierSce.Groups("gpeVarDate").Items.Add(it)
            End Select
            'it.SubItems.Add(champs.chSourceLongueur)
            ltv_varFichierSce.Items.Add(it)
            'Ajout des boutons de visualisation des caractéristiques de la variable
            Ajouter_Controles_ListView(ltv_varFichierSce, New Button, nbItems, 1, correspEntree.chOutil.Nom)
            nbItems = nbItems + 1
        Next

        ltv_varFichierSce.EndUpdate()

        ' Ajoute un évènement ColumnWidthChanging et l'associe à la fonction MAJ_positions_dimensions_controles
        ' La fonction se déclenchera dés que la largeur d'une colonne sera modifiée
        AddHandler ltv_varFichierSce.ColumnWidthChanging, AddressOf ltv_varFichierSce_columnWithChanging
        AddHandler ltv_varFichierSce.VScrollChanged, AddressOf ltv_varFichierSce_VScrollChanged

        Return nbItems

    End Function

    ''' <summary>
    ''' Fonction permettant d'ajouter des boutons dans la listView ltv_varFichierSce
    ''' </summary>
    ''' <param name="controle_target"></param>
    ''' <param name="controle_add"></param>
    ''' <param name="no_ligne"></param>
    ''' <param name="no_colonne"></param>
    ''' <param name="nomControl"></param>
    ''' <remarks></remarks>
    Private Sub Ajouter_Controles_ListView(ByRef controle_target As ListView, _
    ByVal controle_add As Windows.Forms.Control, ByVal no_ligne As Integer, _
    ByVal no_colonne As Integer, ByVal nomControl As String)

        ' Teste si controle_add est bien :
        ' Un Button /ou/ une CheckBox /ou/ un Label /ou/ un LinkLabel /ou/ une ProgressBar /ou/ un RadioButton /ou/ une TextBox /ou/ un RichTextBox
        If controle_add.GetType.FullName <> "System.Windows.Forms.Button" And controle_add.GetType.FullName <> "System.Windows.Forms.CheckBox" _
             And controle_add.GetType.FullName <> "System.Windows.Forms.Label" And controle_add.GetType.FullName <> "System.Windows.Forms.LinkLabel" _
             And controle_add.GetType.FullName <> "System.Windows.Forms.ProgressBar" And controle_add.GetType.FullName <> "System.Windows.Forms.RadioButton" _
             And controle_add.GetType.FullName <> "System.Windows.Forms.TextBox" And controle_add.GetType.FullName <> "System.Windows.Forms.RichTextBox" _
             And controle_add.GetType.FullName <> "System.Windows.Forms.ComboBox" And controle_add.GetType.FullName <> "System.Windows.Forms.MaskedTextBox" Then

            ' Si controle_add n'est pas l'un des contrôles précedemment cités,
            ' On affiche un message pour dire que le contrôle choisi n'est pas correcte
            MsgBox("Désolé, " + controle_add.GetType.FullName + " n'est pas accepté")
            Exit Sub
        End If

        ' Teste si le 3° paramètre no_ligne est supérieur ou égale à 0
        If no_ligne < 0 Then
            MsgBox("Désolé, le 3° paramètre no_ligne de la fonction est incorrecte")
            Exit Sub
        End If
        ' Teste si no_ligne correspond à l'index d'un item existant
        If no_ligne > controle_target.Items.Count - 1 Then
            MsgBox("Désolé, l'item ayant pour index " + no_ligne.ToString + " n'existe pas")
            Exit Sub
        End If

        ' Teste si le 4° paramètre no_colonne est supérieur ou égale à 0
        If no_colonne < 0 Then
            MsgBox("Désolé, le 4° paramètre no_colonne de la fonction est incorrecte")
            Exit Sub
        End If
        'Teste si no_colonne correspond à l'index d'une colonne existante
        If no_colonne > controle_target.Columns.Count - 1 Then
            MsgBox("Désolé, la colonne ayant pour index " + no_colonne.ToString + " n'existe pas")
            Exit Sub
        End If

        If controle_add.GetType.FullName = "System.Windows.Forms.Button" Then
            Dim Control As New Button
            controle_target.Controls.Add(Control)
        ElseIf controle_add.GetType.FullName = "System.Windows.Forms.CheckBox" Then
            Dim Control As New CheckBox
            controle_target.Controls.Add(Control)
        ElseIf controle_add.GetType.FullName = "System.Windows.Forms.Label" Then
            Dim Control As New System.Windows.Forms.Label
            controle_target.Controls.Add(Control)
        ElseIf controle_add.GetType.FullName = "System.Windows.Forms.LinkLabel" Then
            Dim Control As New LinkLabel
            controle_target.Controls.Add(Control)
        ElseIf controle_add.GetType.FullName = "System.Windows.Forms.ProgressBar" Then
            Dim Control As New ProgressBar
            controle_target.Controls.Add(Control)
        ElseIf controle_add.GetType.FullName = "System.Windows.Forms.Radiobutton" Then
            Dim Control As New RadioButton
            controle_target.Controls.Add(Control)
        ElseIf controle_add.GetType.FullName = "System.Windows.Forms.TextBox" Then
            Dim Control As New TextBox
            controle_target.Controls.Add(Control)
        ElseIf controle_add.GetType.FullName = "System.Windows.Forms.RichTextBox" Then
            Dim Control As New RichTextBox
            controle_target.Controls.Add(Control)
        ElseIf controle_add.GetType.FullName = "System.Windows.Forms.ComboBox" Then
            Dim Control As New ComboBox
            controle_target.Controls.Add(Control)
        ElseIf controle_add.GetType.FullName = "System.Windows.Forms.MaskedTextBox" Then
            Dim Control As New MaskedTextBox
            controle_target.Controls.Add(Control)
        End If

        ' Utilise la propriété Tag pour se souvenir où a été ajouté le contrôle
        controle_target.Controls(controle_target.Controls.Count - 1).Tag = no_ligne.ToString + "|" + no_colonne.ToString
        controle_target.Controls(controle_target.Controls.Count - 1).Name = no_ligne.ToString & "btnVisu"

        'L'appel à getItemRect permet d'initialiser les valeurs de la méthode controle_target.items(no_ling).SubItems(no_colonne).Bounds 
        Dim top As Rectangle = controle_target.GetItemRect(no_ligne)

        ' Place nouveau contrôle dans la cellule choisie
        With controle_target.Items(no_ligne).SubItems(no_colonne).Bounds
            controle_target.Controls(controle_target.Controls.Count - 1).Top = .Top
            controle_target.Controls(controle_target.Controls.Count - 1).Left = .Left + (.Width - 20) / 2
            controle_target.Controls(controle_target.Controls.Count - 1).Width = 20
            controle_target.Controls(controle_target.Controls.Count - 1).Height = .Height
        End With

        AddHandler controle_target.Controls(controle_target.Controls.Count - 1).Click, AddressOf Click_controles_ListView

    End Sub

    Private Sub ltv_varFichierSce_columnWithChanging(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnWidthChangingEventArgs)
        MAJ_positions_dimensions_controles_ListView(sender)
    End Sub
    Private Sub ltv_varFichierSce_VScrollChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs)
        MAJ_positions_dimensions_controles_ListView(sender)
    End Sub

    ''' <summary>
    ''' Fonction permettant de mettre à jour le positionnement et la taille des boutons
    ''' de la listView lorsque les colonnes de cette dernière sont redimensionnées
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub MAJ_positions_dimensions_controles_ListView(ByVal sender As Object)
        Dim numLigne, numColonne, posSep As Integer
        For Each c As Control In sender.Controls
            'On récupère les N° de ligne et de colonnes
            posSep = InStr(c.Tag, "|")
            If posSep <> 0 Then
                numLigne = CType(Microsoft.VisualBasic.Left(c.Tag, posSep - 1), Integer)
                numColonne = CType(Microsoft.VisualBasic.Right(c.Tag, Len(c.Tag) - posSep), Integer)
            End If
            With sender.Items(numLigne).SubItems(numColonne).Bounds
                c.Top = .Top
                c.Left = .Left + (.width - 20) / 2
                c.Width = 20
                c.Height = .Height
            End With
        Next
    End Sub

    ''' <summary>
    ''' Procédure déclenchée lorsqu'un bouton de la listView des variables de la base est cliqué
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Click_controles_ListView(ByVal sender As Object, ByVal e As System.EventArgs)

        'En fonction du tag du sender, on peut retrouver le nom de la variable associée
        Dim btn_Detail As Button
        btn_Detail = CType(sender, Button)
        'Récupération de l'indice du bouton en cours
        Dim numBtn As Integer = CInt(Microsoft.VisualBasic.Left(btn_Detail.Name, Len(btn_Detail.Name) - 7))
        'Détermination du nom de la variable que l'on souhaite étudier
        Dim nomVar As String = ltv_varFichierSce.Items(ltv_varFichierSce.TopItem.Index + numBtn).Text

        'Récupération du type et de la longueur
        Dim typeVar, LongVar As String
        typeVar = _universBDD.listeTraitements.getTraitTbleEncours.mapEntree.Item(nomVar).chOutil.getFormat.typeAff.Name
        LongVar = "0"

        'Récupération des valeurs distinctes de la variable
        Dim detailVar As New frmDetailsVariable(nomVar, typeVar, LongVar, _universBDD.listeTraitements.getTraitTbleEncours.getValeursEntree(nomVar))
        detailVar.Show()

    End Sub

#End Region

#Region "Boutons Consultation/Paramétrage/Suppression de correspondances"
    ''' <summary>
    ''' Demande d'ouverture d'une fenêtre présentant les caractéristiques détaillées d'un champs
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btn_corresp_det_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
                btn_corresp_det01.Click, btn_corresp_det02.Click, btn_corresp_det03.Click, btn_corresp_det04.Click, _
                 btn_corresp_det05.Click, btn_corresp_det06.Click, btn_corresp_det07.Click, _
                btn_corresp_det08.Click, btn_corresp_det09.Click, btn_corresp_det10.Click, btn_corresp_det11.Click, _
                btn_corresp_det12.Click, btn_corresp_det13.Click, btn_corresp_det14.Click, btn_corresp_det15.Click, _
                btn_corresp_det16.Click, btn_corresp_det17.Click, btn_corresp_det18.Click

        Dim btn_corresp_det As Button, lbl_descChamps As Label, indice As String

        btn_corresp_det = CType(sender, Button)
        indice = Microsoft.VisualBasic.Right(btn_corresp_det.Name, 2)
        lbl_descChamps = Controls.Find("lbl_descChamps" & indice, True)(0)

        Dim correspModifiee As Correspondance
        With _universBDD.listeTraitements.getTraitTbleEncours.ListeChampsSortie
            correspModifiee = .Item(lbl_descChamps.Text)
            'On fait une copie de l'objet correspondance
            'afin de pouvoir le récupérer en cas d'abandon
            .saveCorresp(correspModifiee.description)
        End With
        'Ouverture de la fenêtre de consultation de la correspondance
        Dim ppchamps As New DlgVisuCorresp(_universBDD.listeTraitements.getTraitTbleEncours, typeMapping.SORTIE, correspModifiee.description)
        ppchamps.Show()

    End Sub
    ''' <summary>
    ''' Demande de suppression d'une association dans l'intégration de la table d'encours
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btn_corresp_eff_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
                btn_corresp_eff01.Click, btn_corresp_eff02.Click, btn_corresp_eff03.Click, btn_corresp_eff04.Click, _
                 btn_corresp_eff05.Click, btn_corresp_eff06.Click, btn_corresp_eff07.Click, _
                btn_corresp_eff08.Click, btn_corresp_eff09.Click, btn_corresp_eff10.Click, btn_corresp_eff11.Click, _
                btn_corresp_eff12.Click, btn_corresp_eff13.Click, btn_corresp_eff14.Click, btn_corresp_eff15.Click, _
                btn_corresp_eff16.Click, btn_corresp_eff17.Click, btn_corresp_eff18.Click

        'Récupération de la référence au traitement d'import de la table d'encours
        Dim tbleEncours As tableBDD = CType(_universBDD.getTraitement("TbleEncours"), tableBDD)

        'Récupération de l'indice du bouton de suppression enclenché
        'ainsi que des informations afférentes
        Dim btn_corresp_eff As Button, lbl_descChamps As Label, indice As String
        btn_corresp_eff = CType(sender, Button)
        indice = Microsoft.VisualBasic.Right(btn_corresp_eff.Name, 2)
        lbl_descChamps = Controls.Find("lbl_descChamps" & indice, True)(0)

        'Suppression du champs en entrée de la correspondance
        tbleEncours.ListeChampsSortie.setFormuleEgaleNothing(lbl_descChamps.Text)

    End Sub
#End Region

#Region "Sauvegarde / chargement d'un mapping de la base d'encours"

    ''' <summary>
    ''' Sauvegarde du schéma d'intégration en cours de la table d'encours
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btn_EncCorrespSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_EncCorrespSave.Click

        Dim SaveFileDialog1 As New SaveFileDialog
        SaveFileDialog1.InitialDirectory = csteEmplacementParametrage
        SaveFileDialog1.Filter = "Fichiers de correspondance encours (*.oma)|*.oma"

        If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
            'Sauvegarde des objets métiers
            Dim mapTxGar As baseListeChampsSortieTable = _universBDD.listeTraitements.getTraitTbleEncours.ListeChampsSortie
            mapTxGar.save(SaveFileDialog1.FileName)
            MsgBox("Le mapping courant de la table d'encours a été enregistré sous " & SaveFileDialog1.FileName)
        End If

    End Sub

    ''' <summary>
    ''' Chargement d'un schéma d'intégration pour la table d'encours
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btn_EncCorrespLoad_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_EncCorrespLoad.Click

        Dim tbleSegmentsPoss As New Dictionary(Of String, Correspondance)
        Dim openFileDialog1 As New OpenFileDialog
        openFileDialog1.InitialDirectory = csteEmplacementParametrage
        openFileDialog1.Filter = "Corresp. encours (*.oma)|*.oma"

        If openFileDialog1.ShowDialog() = DialogResult.OK Then

            'Chargement des correspondances sauvegardés
            baseListeChampsSortieTable.load(openFileDialog1.FileName, _universBDD.listeTraitements.getTraitTbleEncours)
        End If

    End Sub

#End Region

#Region "Glisser / Déposer depuis la liste des variables du fichier source vers la liste des correspondances"

    Private Sub ltv_varFichierSce_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles ltv_varFichierSce.ItemDrag
        Try
            If Not ltv_varFichierSce.SelectedItems Is Nothing Then
                ltv_varFichierSce.DoDragDrop(ltv_varFichierSce.SelectedItems.Item(0).Text, DragDropEffects.Copy)
            End If
        Catch ex As Exception
        End Try
    End Sub

    Private Sub txt_correspondances_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles _
    lbl_corresp01.DragEnter, lbl_corresp02.DragEnter, lbl_corresp03.DragEnter, lbl_corresp04.DragEnter, _
     lbl_corresp05.DragEnter, lbl_corresp06.DragEnter, lbl_corresp07.DragEnter, _
    lbl_corresp08.DragEnter, lbl_corresp09.DragEnter, lbl_corresp10.DragEnter, lbl_corresp11.DragEnter, _
    lbl_corresp12.DragEnter, lbl_corresp13.DragEnter, lbl_corresp14.DragEnter, lbl_corresp15.DragEnter, _
    lbl_corresp16.DragEnter, lbl_corresp17.DragEnter, lbl_corresp18.DragEnter
        If (e.Data.GetDataPresent(DataFormats.Text)) Then
            e.Effect = DragDropEffects.Copy
        Else
            e.Effect = DragDropEffects.None
        End If
    End Sub
    Private Sub lbl_corresp1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp01.DragDrop
        lbl_corresp_DragDrop("01", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp02.DragDrop
        lbl_corresp_DragDrop("02", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp3_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp03.DragDrop
        lbl_corresp_DragDrop("03", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp4_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp04.DragDrop
        lbl_corresp_DragDrop("04", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp6_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp05.DragDrop
        lbl_corresp_DragDrop("05", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp7_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp06.DragDrop
        lbl_corresp_DragDrop("06", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp8_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp07.DragDrop
        lbl_corresp_DragDrop("07", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp9_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp08.DragDrop
        lbl_corresp_DragDrop("08", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp10_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp09.DragDrop
        lbl_corresp_DragDrop("09", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp11_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp10.DragDrop
        lbl_corresp_DragDrop("10", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp12_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp11.DragDrop
        lbl_corresp_DragDrop("11", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp13_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp12.DragDrop
        lbl_corresp_DragDrop("12", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp14_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp13.DragDrop
        lbl_corresp_DragDrop("13", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp15_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp14.DragDrop
        lbl_corresp_DragDrop("14", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp16_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp15.DragDrop
        lbl_corresp_DragDrop("15", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp17_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp16.DragDrop
        lbl_corresp_DragDrop("16", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp18_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp17.DragDrop
        lbl_corresp_DragDrop("17", e.Data.GetData(DataFormats.Text).ToString)
    End Sub
    Private Sub lbl_corresp19_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lbl_corresp18.DragDrop
        lbl_corresp_DragDrop("18", e.Data.GetData(DataFormats.Text).ToString)
    End Sub

    Private Sub lbl_corresp_DragDrop(ByVal indice As String, ByVal contenu As String)

        'Récupération :
        '   - de la description de la correspondance, du bouton indiquant son état et du label
        'indiquant le nom du champs source
        Dim lbl_descChamps As Label
        lbl_descChamps = Controls.Find("lbl_descChamps" & indice, True)(0)
        _universBDD.listeTraitements.getTraitTbleEncours.setChSortieFormuleEgaleChampsEntree(contenu, lbl_descChamps.Text)

    End Sub

#End Region

#End Region

#Region "Onglet de paramétrage des retraitements"

    Private Sub cbx_modeleTranches_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles cbx_modeleTrAges.SelectedValueChanged, cbx_ModeleTrCapi.SelectedValueChanged
        Dim cbx As ComboBox = CType(sender, ComboBox)
        Try
            If cbx Is cbx_modeleTrAges Then
                If cbx.SelectedValue = "trAgeTemp.sas7bdat" Then
                    dgv_RetTrAges.AllowUserToAddRows = True
                    dgv_RetTrAges.AllowUserToDeleteRows = True
                    dgv_RetTrAges.ReadOnly = False
                Else
                    dgv_RetTrAges.AllowUserToAddRows = False
                    dgv_RetTrAges.AllowUserToDeleteRows = False
                    dgv_RetTrAges.ReadOnly = True
                    If Not cbx_modeleTrAges.SelectedValue Is Nothing Then
                        With _universBDD.listeTraitements.getTraitTbleTrAge
                            .nomCompletFichier = New Cla_NomFichier(csteEmplacementReferentiel & cbx_modeleTrAges.SelectedValue)
                            If .ListeChampsSortie.ContainsKey("trAge") Then .ListeChampsSortie.setDescription("trAge", "Tranche d'âge")
                            If .ListeChampsSortie.ContainsKey("minTrAge") Then .ListeChampsSortie.setDescription("minTrAge", "Age minimum de la tranche")
                            If .ListeChampsSortie.ContainsKey("maxTrAge") Then .ListeChampsSortie.setDescription("maxTrAge", "Age maximum de la tranche")
                        End With
                        Dim tab_trAge As DataTable = _
                            _universBDD.listeTraitements _
                                       .getTraitTbleTrAge _
                                       .execute_DataTableSortieToDgv(True, dgv_RetTrAges, True)
                        Dim correspTranchesAges As CorrespondanceTranche = _universBDD.listeTraitements.getTraitTbleEncoursPrep1.ListeChampsSortie.Item(desctrAge)
                        correspTranchesAges.setDataTableCorrespTranches(tab_trAge)
                    End If
                    'Astuce permettant de relier la dataTable des tranches d'âge et la correspondance représentant les tranches d'âge
                    'If Not _universBDD.listeTraitements.getTraitTbleEncoursPrep1 Is Nothing Then
                    'CType(_universBDD.listeTraitements.getTraitTbleEncoursPrep1.mapSortie.Item(desctrAge), CorrespondanceTranche).setDataTableCorrespTranches(dtble_trAge)
                    'End If
                    'dgv_RetTrAges.DataSource = dataTableRef
                End If
            End If
            If cbx Is cbx_ModeleTrCapi Then
                If cbx.SelectedValue = "trCapiTemp.sas7bdat" Then
                    dgv_retTrCapiEmp.AllowUserToAddRows = True
                    dgv_retTrCapiEmp.AllowUserToDeleteRows = True
                    dgv_retTrCapiEmp.ReadOnly = False
                Else
                    dgv_retTrCapiEmp.AllowUserToAddRows = False
                    dgv_retTrCapiEmp.AllowUserToDeleteRows = False
                    dgv_retTrCapiEmp.ReadOnly = True
                    If Not cbx_ModeleTrCapi.SelectedValue Is Nothing Then
                        With _universBDD.listeTraitements.getTraitTbleTrCapi
                            .nomCompletFichier = New Cla_NomFichier(csteEmplacementReferentiel & cbx_ModeleTrCapi.SelectedValue)
                            If .ListeChampsSortie.ContainsKey("trCapi") Then .ListeChampsSortie.setDescription("trCapi", "Tranche de capital emprunté")
                            If .ListeChampsSortie.ContainsKey("minTrCapi") Then .ListeChampsSortie.setDescription("minTrCapi", "Capital emprunté minimal de la tranche")
                            If .ListeChampsSortie.ContainsKey("maxTrCapi") Then .ListeChampsSortie.setDescription("maxTrCapi", "Capital emprunté maximal de la tranche")
                            .ListeChampsSortie.setFormatAff("Capital emprunté maximal de la tranche", "#,##0")
                        End With
                        Dim tab_trCapi As DataTable = _
                            _universBDD.listeTraitements _
                                       .getTraitTbleTrCapi _
                                       .execute_DataTableSortieToDgv(True, dgv_retTrCapiEmp, True)
                        Dim correspTranchesCapi As CorrespondanceTranche = _universBDD.listeTraitements.getTraitTbleEncoursPrep1.ListeChampsSortie.Item("Tranche de capitaux")
                        correspTranchesCapi.setDataTableCorrespTranches(tab_trCapi)
                        dtble_trCapi = _universBDD.listeTraitements.getTraitTbleTrCapi.execute_DataTableSortieToDgv(True, dgv_retTrCapiEmp)
                    End If
                End If
            End If
        Catch ex As Exception
            If _universBDD.connectionSAS.State <> ConnectionState.Closed Then
                _universBDD.connectionSAS.Close()
            End If
            MsgBox(ex.Message)
        End Try
    End Sub
    Private Sub cbx_filtresAgesSous_SelectedItemChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbxAgeMaxSous.SelectedValueChanged, cbxAgeMaxSous.SelectedValueChanged
        With _universBDD.listeTraitements.getTraitTbleEncoursPrep1
            If sender Is cbxAgeMaxSous Then
                Dim a As String = cbxAgeMaxSous.SelectedItem
                .getWHERE("testAgeMax").valeur = cbxAgeMaxSous.SelectedItem
            End If
            If sender Is cbxAgeMinSous Then
                .getWHERE("testAgeMin").valeur = CInt(cbxAgeMinSous.SelectedItem)
            End If
        End With
    End Sub

#End Region

#Region "Onglet de statistiques sur la base d'encours"
    Private Sub tbp_Statistiques_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbp_Statistiques.Enter
        refreshStats()
    End Sub
#End Region

#Region "Rafraichissements suite aux modifications des objets métiers"

    Public Function actualise(ByVal sender As Object, ByVal notification As Object) As PTIC_Util.resultatValidationContraintes Implements PTIC_Util.IObserver.actualise
        'Objets observés :
        '   - les caractéristiques générales du traitement traitTbleEncours
        '   - tous les champs en sortie du traitement traitTbleEncours
        _bloqueMAJModeleDepuisIHM = True
        If TypeOf sender Is tableBDD Then
            Dim table_modifiee As tableBDD = DirectCast(sender, tableBDD)
            If table_modifiee.nom = PTIC_Util.nomTraitTbleEncours Then
                actualiseOngletChoixBase(table_modifiee, notification)
            End If
        End If
        _bloqueMAJModeleDepuisIHM = False

        If TypeOf sender Is Correspondance Then
            actualiseFromCorrespTbleEncours(sender, notification)
        End If

        Return Nothing

    End Function

    Public Sub actualiseFromCorrespTbleEncours(ByVal correspModifiee As Correspondance, ByVal notification As Object)

        Dim notifModifCorresp As Correspondance.Notification = notification

        If notifModifCorresp = Correspondance.Notification.EtatAchange Then
            refreshBtnEtatChamps(correspModifiee)
        End If
        If notifModifCorresp = Correspondance.Notification.ChampsSourceAchange Then
            refreshBtnNomChamps(correspModifiee)
        End If
        If notifModifCorresp = Correspondance.Notification.TypeChampsEntreeAchange Then
            refreshBtnNomChamps(correspModifiee)
        End If

    End Sub

#End Region

#Region "Rafraichissements des onglets"
#Region "Onglet choix de la table d'encours"
    Private Function actualiseOngletChoixBase(ByVal tableBDDencours As tableBDD, ByVal notification As Object)

        Dim modifTrait As modifsTraitement = DirectCast(notification, modifsTraitement)

        If modifTrait = modifsTraitement.nomFichier Then

            'Si un nom de fichier est renseigné pour la table
            If Not tableBDDencours.nomCompletFichier Is Nothing Then

                'Récupération du nom du fichier complet du fichier d'encours dans un label
                PtiC_lbl_EncEmplFichier.Text = tableBDDencours.nomCompletFichier.nomComplet
                'Mise à jour de la combo pour le choix de la table à extraire
                cbx_NomTableEncours.DataSource = _universBDD.listeTraitements.getTraitTbleEncours.getListTablesDispoBDD

                'Activation des contrôles permettant de choisir la table d'encours
                PtiC_PanelGpeBoxChoixTbleEnc.Enabled = True
                btn_visualiser.Enabled = True
                cbx_NomTableEncours.Enabled = True

            End If
        End If

        If modifTrait = modifsTraitement.nomTable Then

            If Not tableBDDencours.nomTableDansBDD Is Nothing Then

                cbx_NomTableEncours.SelectedItem = tableBDDencours.nomTableDansBDD
            End If
        End If

        If modifTrait = modifsTraitement.statsTable Then
            lbl_EncNbColtble.Enabled = True
            lbl_EncNblgntble.Enabled = True
            lbl_nblgntbleEncours.Enabled = True
            lbl_nbcoltbleEncours.Enabled = True
            lbl_EncNblgntble.Enabled = True
            lbl_nblgntbleEncours.Enabled = True
            lbl_EncNbColtble.Enabled = True
            lbl_nbcoltbleEncours.Enabled = True

            'Récupération du nombre de lignes / Mise au bon format d'affichage
            Dim nbLignes As Integer = _universBDD.listeTraitements.getTraitTbleEncours.getStatsTable.nbLignes
            Dim nbColonnes As Integer = _universBDD.listeTraitements.getTraitTbleEncours.getStatsTable.nbColonnes

            Dim formatNombre As NumberFormatInfo = New CultureInfo("fr-FR", False).NumberFormat
            Dim nbToString As String = CType(nbLignes, Double).ToString("N", formatNombre)
            lbl_EncNblgntble.Text = Microsoft.VisualBasic.Left(nbToString, Len(nbToString) - 3)
            lbl_EncNbColtble.Text = nbColonnes
            ltv_varFichierSce.Items.Clear()
            ltv_varFichierSce.Controls.Clear()
            alim_ltv_varFichierSce()

        End If
        Return Nothing
    End Function
#End Region
#Region "Onglet correspondances de la table d'encours"
    Private Sub refreshBtnEtatChamps(ByVal champs As Correspondance)
        'Actualisation de la couleur du bouton représentant la correspondance
        Dim btn_Aactu As Button = Controls.Find("btn_corresp_ok" & indiceFromChamps(champs), True)(0)
        btn_Aactu.BackColor = champs.etat
    End Sub
    Private Sub refreshBtnNomChamps(ByVal champs As Correspondance)

        Dim lbl_corresp As Label = Controls.Find("lbl_corresp" & indiceFromChamps(champs), True)(0)
        If Not champs.chBDD Is Nothing Then
            If champs.typeChEntree = DefinitionsTypes.typeChEntreeMapping.TABLE Then
                lbl_corresp.Text = champs.chBDD.Nom
            Else
                lbl_corresp.Text = "='" & champs.chBDD.Nom & "'"
            End If
        Else
            lbl_corresp.Text = ""
        End If

    End Sub
    Private Function indiceFromChamps(ByVal champs As Correspondance) As String
        Dim indice As Integer = 0, cstr_indice As String = ""
        For i As Integer = 0 To ldescChSortie.GetUpperBound(0)
            cstr_indice = IIf(i + 1 < 10, "0" & CStr(i + 1), CStr(i + 1))
            If TableLayoutPanel1.Controls("lbl_descChamps" & cstr_indice).Text = champs.description Then
                indice = i + 1
            End If
        Next
        cstr_indice = IIf(indice < 10, "0" & CStr(indice), CStr(indice))
        Return cstr_indice
    End Function
#End Region
#Region "Onglet statistiques"
    Public Sub refreshStats()

        'Boolean indiquant si le traitement préparatoires aux statistiques est valide ou non
        Dim isAffichageValide As Boolean = False
        Dim dataTable_reqStats As DataTable = Nothing

        'Récupération des traitements destinés à gérer l'affichage des statistiques
        Dim traitReq As RequeteBDD = _universBDD.listeTraitements.getTraitTbleEncoursStats
        If Not traitReq Is Nothing Then
            dataTable_reqStats = traitReq.execute_DataTable(True)
        End If

        If Not dataTable_reqStats Is Nothing Then

            'Si la requête s'est correctement exécutée ou déjà à jour, alors l'affichage est valide
            isAffichageValide = True
            refreshStatsClearGraphs()

            'Création des tableaux permettant d'alimenter les graphiques (à remplacer par des requêtes LINQ)
            Dim nomVarCSR As String = nomSumCSR
            Dim CSRtypesPrets() As Double = refreshStatsCreeTableCSRtypePret(dataTable_reqStats)
            Dim CSRtranchesAges() As Double = refreshStatsCreeTableCSRTranchesAge(dataTable_reqStats)
            Dim txNomTypesPrets() As Double = refreshStatsCreeTableTxNomTypesPrets(dataTable_reqStats, CSRtypesPrets)
            Dim dureeTypesPrets() As Double = refreshStatsCreeTableDureeTypesPrets(dataTable_reqStats, CSRtypesPrets)

            Dim fontLegend As New ZedGraph.FontSpec("Tahoma", 20, Color.Black, False, False, False, Color.White, Nothing, ZedGraph.FillType.Brush)
            fontLegend.Border.IsVisible = False
            Dim titleFont As ZedGraph.FontSpec
            titleFont = New ZedGraph.FontSpec("Tahoma", 22, Color.Black, True, False, False, Color.White, Nothing, ZedGraph.FillType.Brush)
            titleFont.Border.IsVisible = False
            Dim labels As String() = {"Immobilier", "Professionnel", "Personnel"}

            refreshStatsMAJgraphCSRtypesPrets(CSRtypesPrets, titleFont, fontLegend)
            refreshStatsMAJgraphCSRTrAge(CSRtranchesAges, titleFont, fontLegend)
            refreshStatsMAJgraphTxNomTypesPret(txNomTypesPrets, titleFont, fontLegend, labels)
            refreshStatsMAJgraphDureesTypesPret(dureeTypesPrets, titleFont, fontLegend, labels)

        End If

        If Not isAffichageValide Then refreshStatsClearGraphs()

        Me.Invalidate()

    End Sub

    Private Function refreshStatsCreeTableCSRtypePret(ByVal dtble_reqStats As DataTable) As Double()
        'Création des tableaux permettant d'alimenter les graphiques (à remplacer par des requêtes LINK)
        'CSR par types de prêt
        Dim nomVarCSR As String = nomSumCSR
        Dim CSRtypesPrets(2) As Double
        For Each r As DataRow In dtble_reqStats.Rows
            If r("id_type_pret") = "Immobilier" Then CSRtypesPrets(0) = CSRtypesPrets(0) + r(nomVarCSR)
            If r("id_type_pret") = "Professionnel" Then CSRtypesPrets(1) = CSRtypesPrets(1) + r(nomVarCSR)
            If r("id_type_pret") = "Personnel" Then CSRtypesPrets(2) = CSRtypesPrets(2) + r(nomVarCSR)
        Next
        Return CSRtypesPrets
    End Function
    Private Function refreshStatsCreeTableCSRTranchesAge(ByVal dataTable_reqStats As DataTable) As Double()
        Dim nomVarCSR As String = nomSumCSR
        Dim CSRtranchesAges(2) As Double
        For Each r As DataRow In dataTable_reqStats.Rows
            If r("tr_age") = "A" Then CSRtranchesAges(0) = CSRtranchesAges(0) + r(nomVarCSR)
            If r("tr_age") = "B" Then CSRtranchesAges(1) = CSRtranchesAges(1) + r(nomVarCSR)
            If r("tr_age") = "C" Then CSRtranchesAges(2) = CSRtranchesAges(2) + r(nomVarCSR)
        Next
        Return CSRtranchesAges
    End Function
    Private Function refreshStatsCreeTableTxNomTypesPrets(ByVal dataTable_reqStats As DataTable, _
                                                          ByVal CSRTypesPrets As Double()) As Double()
        Dim nomVarCSR As String = nomSumCSR
        Dim txNomTypesPrets(2) As Double
        For Each r As DataRow In dataTable_reqStats.Rows
            If r("id_type_pret") = "Immobilier" Then
                txNomTypesPrets(0) = txNomTypesPrets(0) + r(nomTxNom_Actu) * r(nomVarCSR) / CSRTypesPrets(0)
            End If
            If r("id_type_pret") = "Professionnel" Then
                txNomTypesPrets(1) = txNomTypesPrets(1) + r(nomTxNom_Actu) * r(nomVarCSR) / CSRTypesPrets(1)
            End If
            If r("id_type_pret") = "Personnel" Then
                txNomTypesPrets(2) = txNomTypesPrets(2) + r(nomTxNom_Actu) * r(nomVarCSR) / CSRTypesPrets(2)
            End If
        Next
        Return txNomTypesPrets

    End Function
    Private Function refreshStatsCreeTableDureeTypesPrets(ByVal dataTable_reqStats As DataTable, _
                                                          ByVal CSRTypesPrets As Double()) As Double()
        Dim nomVarCSR As String = nomSumCSR
        Dim dureeTypesPrets(2) As Double
        For Each r As DataRow In dataTable_reqStats.Rows
            If r("id_type_pret") = "Immobilier" Then
                dureeTypesPrets(0) = dureeTypesPrets(0) + r(nomDuree_Actu) * r(nomVarCSR) / CSRTypesPrets(0)
            End If
            If r("id_type_pret") = "Professionnel" Then
                dureeTypesPrets(1) = dureeTypesPrets(1) + r(nomDuree_Actu) * r(nomVarCSR) / CSRTypesPrets(1)
            End If
            If r("id_type_pret") = "Personnel" Then
                dureeTypesPrets(2) = dureeTypesPrets(1) + r(nomDuree_Actu) * r(nomVarCSR) / CSRTypesPrets(2)
            End If
        Next
        Return dureeTypesPrets

    End Function

    Private Sub refreshStatsMAJgraphCSRtypesPrets(ByVal CSRtypesPrets As Double(), _
                                                  ByVal titleFont As ZedGraph.FontSpec, _
                                                  ByVal fontLegend As ZedGraph.FontSpec)

        'Mise à jour du graphique des CSR par types de prêt
        Dim myPane As ZedGraph.GraphPane = ZedGraphCSRtypePret.GraphPane
        myPane.Title.Text = "Capitaux Sous Risque par Type de prêt"
        myPane.Title.FontSpec = titleFont
        myPane.Legend.FontSpec = fontLegend
        myPane.Legend.Position = ZedGraph.LegendPos.BottomCenter
        myPane.XAxis.Title.Text = False
        myPane.YAxis.IsVisible = False
        myPane.IsFontsScaled = True

        Dim pieSliceImmo, pieSlicePerso, pieSlicePro As ZedGraph.PieItem
        pieSliceImmo = myPane.AddPieSlice(CSRtypesPrets(0), Color.FromArgb(241, 234, 116), 0.05, "Immobilier")
        pieSliceImmo.LabelType = ZedGraph.PieLabelType.Percent
        pieSliceImmo.LabelDetail.FontSpec = fontLegend
        pieSlicePro = myPane.AddPieSlice(CSRtypesPrets(1), Color.FromArgb(231, 213, 231), 0.05, "Professionnel")
        pieSlicePro.LabelType = ZedGraph.PieLabelType.Percent
        pieSlicePro.LabelDetail.FontSpec = fontLegend
        pieSlicePerso = myPane.AddPieSlice(CSRtypesPrets(2), Color.FromArgb(237, 221, 207), 0.05, "Personnel")
        pieSlicePerso.LabelType = ZedGraph.PieLabelType.Percent
        pieSlicePerso.LabelDetail.FontSpec = fontLegend

        ZedGraphCSRtypePret.AxisChange()

    End Sub
    Private Sub refreshStatsMAJgraphCSRTrAge(ByVal CSRtranchesAges As Double(), _
                                             ByVal titleFont As ZedGraph.FontSpec, _
                                             ByVal fontLegend As ZedGraph.FontSpec)

        'Mise à jour du graphique des CSR par tranches d'âge
        Dim myPane1 As ZedGraph.GraphPane = ZedGraphCSRTranches.GraphPane

        myPane1.Title.Text = "Capitaux sous risque par Tranches d'âges"
        myPane1.Title.FontSpec = titleFont
        myPane1.Legend.FontSpec = fontLegend
        myPane1.Legend.Position = ZedGraph.LegendPos.BottomCenter
        myPane1.XAxis.IsVisible = False
        myPane1.YAxis.IsVisible = False
        myPane1.IsFontsScaled = True

        Dim pieSliceImmo1, pieSlicePerso1, pieSlicePro1 As ZedGraph.PieItem
        pieSliceImmo1 = myPane1.AddPieSlice(CSRtranchesAges(0), Color.FromArgb(212, 225, 242), 0.05, "18-35 ans")
        pieSliceImmo1.LabelType = ZedGraph.PieLabelType.Percent
        pieSliceImmo1.LabelDetail.FontSpec = fontLegend
        pieSlicePro1 = myPane1.AddPieSlice(CSRtranchesAges(1), Color.FromArgb(186, 181, 132), 0.05, "36-45 ans")
        pieSlicePro1.LabelType = ZedGraph.PieLabelType.Percent
        pieSlicePro1.LabelDetail.FontSpec = fontLegend
        pieSlicePerso1 = myPane1.AddPieSlice(CSRtranchesAges(2), Color.FromArgb(232, 171, 182), 0.05, "+ 45 ans")
        pieSlicePerso1.LabelType = ZedGraph.PieLabelType.Percent
        pieSlicePerso1.LabelDetail.FontSpec = fontLegend

        ZedGraphCSRTranches.AxisChange()

    End Sub
    Public Sub refreshStatsMAJgraphTxNomTypesPret(ByVal txNomTypesPrets As Double(), _
                                             ByVal titleFont As ZedGraph.FontSpec, _
                                             ByVal fontLegend As ZedGraph.FontSpec, _
                                             ByVal labels As String())
        'Mise à jour des taux nominaux par type de prêt et tranches d'âge
        Dim myPane2 As ZedGraph.GraphPane = ZedGraphTxNom.GraphPane()

        myPane2.Title.Text = "Taux nominaux pondérés par les CSR"
        myPane2.Title.FontSpec = titleFont
        myPane2.XAxis.Title.IsVisible = False
        myPane2.YAxis.Title.IsVisible = False
        myPane2.Legend.IsVisible = False
        myPane2.XAxis.IsVisible = True
        myPane2.YAxis.IsVisible = True
        Dim txnomImmoBar As ZedGraph.BarItem = myPane2.AddBar("MyCurve", _
                            Nothing, txNomTypesPrets, Color.FromArgb(127, 0, 255))
        myPane2.XAxis.Type = ZedGraph.AxisType.Text
        myPane2.XAxis.Scale.TextLabels = labels
        myPane2.XAxis.Scale.FontSpec = fontLegend
        'myPane2.YAxis.Scale.FontSpec = fontLegend
        'myPane2.XAxis.Scale.FontSpec.Angle = 40

        ZedGraphTxNom.AxisChange()
    End Sub
    Private Sub refreshStatsMAJgraphDureesTypesPret(ByVal dureeTypesPrets As Double(), _
                                             ByVal titleFont As ZedGraph.FontSpec, _
                                             ByVal fontLegend As ZedGraph.FontSpec, _
                                             ByVal labels As String())
        'Mise à jour des durées par type de prêt et tranches d'âge
        Dim myPane3 As ZedGraph.GraphPane = ZedGraphDurees.GraphPane()

        myPane3.Title.Text = "Durées à la souscription pondérées par les CSR"
        myPane3.Title.FontSpec = titleFont
        myPane3.XAxis.Title.IsVisible = False
        myPane3.YAxis.Title.IsVisible = False
        myPane3.Legend.IsVisible = False
        myPane3.XAxis.IsVisible = True
        myPane3.YAxis.IsVisible = True
        myPane3.IsFontsScaled = True
        Dim dureeImmoBar As ZedGraph.BarItem = myPane3.AddBar("MyCurve", _
                            Nothing, dureeTypesPrets, Color.FromArgb(0, 125, 0))
        myPane3.XAxis.Type = ZedGraph.AxisType.Text
        myPane3.XAxis.Scale.TextLabels = labels
        myPane3.XAxis.Scale.FontSpec = fontLegend
        'myPane2.YAxis.Scale.FontSpec = fontLegend
        'myPane2.XAxis.Scale.FontSpec.Angle = 40

        ZedGraphDurees.AxisChange()
    End Sub

    Private Sub refreshStatsClearGraphs()
        ZedGraphCSRTranches.GraphPane.CurveList.Clear()
        ZedGraphCSRtypePret.GraphPane.CurveList.Clear()
        ZedGraphDurees.GraphPane.CurveList.Clear()
        ZedGraphTxNom.GraphPane.CurveList.Clear()
    End Sub

#End Region
#End Region

End Class